﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI.WebControls;
using Acamps.Framework.BancoDados;

namespace Acamps.Framework.Util
{
    public class Utilidades
    {
        public static void SetaCombo(DropDownList ddl, object data, string display, string value)
        {
            ddl.ClearSelection();
            ddl.DataSource = data;
            ddl.DataTextField = display;
            ddl.DataValueField = value;
            ddl.DataBind();
            ddl.Items.Insert(0, new ListItem("[ SELECIONE ]", ""));
        }

        public static string SHA1Hash(string input)
        {
            SHA1 sha = new SHA1CryptoServiceProvider();
            byte[] data = Encoding.ASCII.GetBytes(input);
            byte[] hash = sha.ComputeHash(data);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

        public static string EnviaMensagemEmailCampista(string Destinatario, decimal valor, string confirmacao, string contas)
        {
            try
            {
                MailMessage mm = new MailMessage();
                MailAddress to = new MailAddress(Destinatario);
                mm.To.Add(to);
                mm.IsBodyHtml = true;
                mm.Subject = "Confirmação de Inscrição";
                mm.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

                //Modelo de e-mail em html
                StringBuilder sb = new StringBuilder();
                sb.Append("<p>Parabéns!</p>");
                sb.Append("<p>Sua ficha foi incluída com sucesso.</p>");
                sb.Append("<p>Agora falta pouco!</p>");
                sb.Append("<p>Para que sua ficha seja confirmada, deposite o valor de <b>" + valor.ToString("C2") + "</b> referente à taxa de inscrição,</p>");
                sb.Append("<p> e envie os dados do comprovante para: <b>acampsdf@acampsdf.com.br</b> e confirme através de um dos telefones abaixo:</p>");
                sb.Append("<p> <b>" + confirmacao + "</b></p>");
                sb.Append("<p>Segue as contas disponíveis para o depósito:</p>");
                sb.Append("<p> <b>" + contas + "</b></p>");
                sb.Append("<p>________________________________</p>");
                sb.Append("<p>*Equipe AcampsDF*</p>");
                sb.Append("<p>acampsdf@acampsdf.com.br</p>");
                sb.Append("<p> http://www.acampsdf.com.br </p>");
                //Fim do modelo 

                mm.Body = sb.ToString();
                SmtpClient smtp = new SmtpClient();
                smtp.Send(mm);
            }
            catch (Exception e)
            {
                return null;
            }
            return "";
        }

        public static string EnviaMensagemEmailEquipe(Ficha ficha)
        {
            try
            {
                MailMessage mm = new MailMessage();
                MailAddress to = new MailAddress("acampsdf@acampsdf.com.br");
                mm.To.Add(to);
                mm.IsBodyHtml = true;
                mm.Subject = "Incrição Realizada";
                mm.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

                //Modelo de e-mail em html
                StringBuilder sb = new StringBuilder();

                sb.Append("<p>Dados do futuro campista do AcampsDF!</p>");
                sb.Append("<p>Nome: " + ficha.Campista.Nome + ".</p>");
                sb.Append("<p>Sexo: " + ficha.Campista.Sexo == "M" ? "Masculino" : "Feminino" + ".</p>");
                sb.Append("<p>Endereço: " + ficha.Campista.Endereco + ".</p>");
                sb.Append("<p>Cidade: " + ficha.Campista.Cidade + ".</p>");
                sb.Append("<p>Bairro: " + ficha.Campista.Bairro + ".</p>");
                sb.Append("<p>Cep: " + ficha.Campista.Cep + ".</p>");
                sb.Append("<p>Telefones: " + ficha.Campista.Celular + "/" + ficha.Campista.Fixo + ".</p>");
                sb.Append("<p>Tipo Sanguineo: " + ficha.Campista.TipoSanguineo.Descricao + ".</p>");
                sb.Append("<p>Rg: " + ficha.Campista.Rg + ".</p>");
                sb.Append("<p>Estado Civil: " + ficha.Campista.EstadoCivil.Descricao + ".</p>");
                sb.Append("<p>Nascimento: " + ficha.Campista.DataNascimento.Value.ToShortDateString() + ".</p>");
                sb.Append("<p>E-mail: " + ficha.Campista.Email + ".</p>");
                sb.Append("<p>Paroquia: " + ficha.Paroquia + ".</p>");
                sb.Append("<p>Bairro da Paroquia: " + ficha.BairroParoquia + ".</p>");
                sb.Append("<p>Batizado: " + ficha.Batizado != null?  ficha.Batizado.Value ? "Sim" : "Não" : "Não" + ".</p>");
                sb.Append("<p>1º Comunhão: " + ficha.PrimeiraComunhao != null ? ficha.PrimeiraComunhao.Value ? "Sim" : "Não" : "Não" + ".</p>");
                sb.Append("<p>Crisma: " + ficha.Crisma != null ? ficha.Crisma.Value ? "Sim" : "Não" : "Não" + ".</p>");
                sb.Append("<p>Permanencia no Acampamento: " + ficha.Permanencia != null ? ficha.Permanencia.Value ? "Sim" : "Não" : "Não" + ".</p>");
                sb.Append("<p>Movimento religioso: " + ficha.Movimento + ".</p>");
                sb.Append("<p>Participa de Algum Acampamento: " + ficha.Movimento + ".</p>");
                sb.Append("<p>Restrição Atividade Fisica: " + ficha.RestricaoFisica + ".</p>");
                sb.Append("<p>Medicamento: : " + ficha.Medicamento + ".</p>");
                sb.Append("<p>Alergia: : " + ficha.Alergia + ".</p>");
                sb.Append("<p>Dieta: : " + ficha.Dieta + ".</p>");
                sb.Append("<p>Quem Conhece: : " + ficha.Conhece + ".</p>");
                sb.Append("<p>Ficha indicada por: : " + ficha.Indicacao + ".</p>");
                sb.Append("<p>Como Encontrou o Acamps: : " + ficha.ComoEncontrou + ".</p>");
                sb.Append("<p>________________________________</p>");
                sb.Append("<p>*Equipe AcampsDF*</p>");
                sb.Append("<p>acampsdf@acampsdf.com.br</p>");
                sb.Append("<p> http://www.acampsdf.com.br </p>");
                //Fim do modelo 

                mm.Body = sb.ToString();
                SmtpClient smtp = new SmtpClient();
                smtp.Send(mm);
            }
            catch (Exception e)
            {
                return null;
            }
            return "";
        }

        public static string EnviaMensagemEvangelho(string destinatario, StringBuilder corpoEmail)
        {
            try
            {
                MailMessage mm = new MailMessage();
                MailAddress to = new MailAddress(destinatario);
                mm.To.Add(to);
                mm.IsBodyHtml = true;
                mm.Subject = " Evangelho do dia " + DateTime.Now.ToShortDateString();
                mm.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

                mm.Body = corpoEmail.ToString();
                SmtpClient smtp = new SmtpClient();
                smtp.Send(mm);
            }
            catch (Exception e)
            {
                return null;
            }
            return "";
        }

        public static bool ValidaEnderecoEmail(string enderecoEmail)
        {
            try
            {
                //define a expressão regulara para validar o email
                string texto_Validar = enderecoEmail;
                Regex expressaoRegex = new Regex(@"\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}");

                // testa o email com a expressão
                if (expressaoRegex.IsMatch(texto_Validar))
                {
                    // o email é valido
                    return true;
                }
                else
                {
                    // o email é inválido
                    return false;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
